package main

import "fmt"

func printError() {
	fmt.Println("兜底执行")
}

//如果一个函数定义了多个 defer 语句，则按照先进后出的顺序执行(栈)
//defer 语句会在抛出 panic 代码的前面执行
//底层的逻辑是在执行 var k = i / j 这条语句时，遇到除数为 0，则抛出 panic，
//然后立即中断当前函数 main 的执行（后续其他语句都不再执行）
//并按照先进后出顺序依次执行已经在当前函数中声明过的 defer 语句
//最后打印出 panic 日志及错误信息。
func main() {
	defer printError()
	defer func() {
		fmt.Println("除数不能是0!")
	}()
	var i = 1
	var j = 0 //尝试修改这里
	var k = i / j
	fmt.Printf("%d / %d = %d\n", i, j, k)
}
